<?php

namespace application\depend;

/**
 * 正则表达式专用类
 *
 * @author ly-chengminbin
 *        
 */
class Regular {
	
	// 手机号
	public static $REGEX_PHONE = '/^1[\d]{10}$/';
	
	// 身份证号
	public static $REGEX_ID_CARD = ' /^(\d{15}|\d{17}[0-9Xx])$/';
	
	// 验证租赁合同号 15位整数
	public static $REGEX_CONTRACT_NUM = '/^[\d]{15}';
	
	// 验证由中文或英文 组成的用户名 2-25位
	public static $REGEX_USER_NAME = '/^([a-zA-Z\s]{1,25}|[\x{4e00}-\x{9fa5}]{1,25})$/u';
	
	//验证英文 数字 下划线组成用户名  英文开头
	public static $REGEX_LOGIN_NAME = '/^([a-zA-Z]+[a-zA-Z0-9_]*){1,30}$/';
	
	// 验证由中英文数字混合组成的昵称
	public static $REGEX_NICK_NAME = '/^[a-zA-Z0-9\x{4e00}-\x{9fa5}]{1,25}$/u';

    //中英文组成字符串
    public static $REGEX_ENCN_NAME = '/^[a-zA-Z\x{4e00}-\x{9fa5}]{1,25}$/u';
    //中英文 "," "!" 组成字符串
    public static $REGEX_ENCN_STR = '/^[a-zA-Z\x{4e00}-\x{9fa5}\,\!]{1,25}$/u';

	// 验证 4位数字的 验证码
	public static $REGEX_VCODE = '/^[\d]{4}$/';
	
	// 验证 邮箱 格式
	public static $REGEX_EMAIL = '/^[a-zA-Z0-9_]+@([A-Za-z0-9][A-Za-z0-9\.][A-Za-z]{2,14})+$/';
	
	// 验证 userid
	public static $REGEX_USER_ID = '/^[-\w]{20,40}$/';
	
	//验证密码 强度 8位以上
	public static $REGEX_PASS = '/^(?![^a-zA-Z]+$)(?!\D+$)(?![\sa-zA-Z0-9]+$).{8,}$/';
	
	//菜单url  # 或 字母开头中间可以有 "/"   "_"
	public static $REGEX_MENU_URL = '/^(#|\/[a-zA-Z\/]+#?[\?\&a-zA-Z_]*)$/';
	
	// 验证由中英文混组成的菜单名称
	public static $REGEX_MENU_NAME = '/^[a-zA-Z\x{4e00}-\x{9fa5}]{1,25}$/u';
	
	//验证菜单编码
	public static $MENU_CODE = '/^([a-zA-Z][a-zA-Z_\-]*[a-zA-Z]+){1,45}$/';
	//验证菜单 target id
	public static $TARGET_ID = '/^#[a-zA-Z][a-zA-Z0-9\-_]*$/';
	
	//验证角色编码  字母开头结尾 中间可带"_"
	public static $ROLE_KEY = '/^[a-zA-Z][A-Za-z_]*[a-zA-Z]$/';
    // 验证 日期 例：2016-06-03
    public static $REGEX_DATE = '/^([1-9]{1})(\d{3})-([0-3]?)(\d{1})-([0-3]?)(\d{1})$/';

    //难证 正数字
    public static $REGEX_INT = '/^[1-9]+\d*$/';

    //验证MD5
    public static $REGEX_MD5 = '/^[a-zA-Z0-9]{32}$/';

    //浮点数 2位小数
    public static $REGEX_FLOAT_NUM = '/^\d+\.\d{2}$/';

    //验证时间  2017-03-06 04:00:00   这种格式
    public static $REGEX_TIME = '/^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}$/';

    //英文与数字 组合
    public static $REGEX_EN_NUM = '/^[A-Za-z0-9]+$/';


    //纯英文字符串
    public static $REGEX_EN_STR = '/^[a-zA-Z]+$/';

    //由 / 英文 数字组成的  uri
    public static $REGEX_URI = "/^[\"\/\_a-zA-Z0-9\/\-]*$/";

    public static function checkCnEnStr($str = ""){
        $p = self::$REGEX_ENCN_STR;
        if(is_string($str) && preg_match($p,$str)){
            return true;
        }
        return false;
    }


    /**
     * @param string $uri
     * 验证URI
     */
    public static function checkUri($uri = ""){
        if(is_string($uri) && preg_match(self::$REGEX_URI,trim($uri,"\""))) return true;
        return false;
    }

    /**
    *验证纯英文 字符串
    */
    public static function checkEnStr($str = ""){
    	if(is_string($str) && preg_match(self::$REGEX_EN_STR,$str)) return true;
    	return false;
    }
    /**
     * @param string $char
     * 验证英文与数字组合
     */
    public static function checkEnNum($char = ""){
        if(is_string($char) && preg_match(self::$REGEX_EN_NUM,$char)) return true;
        return false;
    }

    /**
     * @param string $time
     * @return bool
     * 验证时间
     */
    public static function checkTime($time = ""){
        if(!is_string($time) || !preg_match(self::$REGEX_TIME,$time)) return false;
        return true;
    }

    /**
     * @param string $num
     * @return bool
     * 验证浮点数  正的
     */
    public static function checkFloatNum($num = ""){
        if(!is_numeric($num) || !preg_match(self::$REGEX_FLOAT_NUM,$num)) return false;
        return true;
    }
    /**
     * @param $int
     * 验证正数
     */
    public static function checkInt($int = ''){
        if(!is_numeric($int) || !preg_match(self::$REGEX_INT,$int)) return false;
        return true;
    }

    /**
     * @param string $name
     * @return bool
     * 验证中英文组成的字符串
     */
    public static function checkCnEnName($name = ""){
        if(!is_string($name) || !preg_match(self::$REGEX_ENCN_NAME,$name)) return false;
        return true;
    }
    public static function checkUrl($url = ''){
        if(!is_string($url) || !preg_match(self::$REGEX_MENU_URL,$url)) return false;
        return true;
    }

	/**
	 * 验证角色编码
	 * @param string $rolekey
	 * @return boolean
	 */
	public static function checkRoleKey($rolekey = ''){
	    if(preg_match(self::$ROLE_KEY, $rolekey)) return true;
	    return false;
	}
	/**
	 * 验证菜单 TARGET ID
	 * #fadsfs  这样的形式
	 * @param string $targetid
	 * @return boolean
	 */
	public static function checkMenuTargetid($targetid = ''){
	    if(preg_match(self::$TARGET_ID,$targetid)) return true;
	    return false;
	}
	/**
	 * 验证菜单编码
	 * 字母_-  组成，必须以字母开头
	 * @param string $menucode
	 */
	public static function checkMenuCode($menucode = ''){
	    if(preg_match(self::$MENU_CODE, $menucode)) return true;
	    return false;
	}
	/**
	 * 验证菜单名称
	 * @param string $menuname
	 * @return boolean
	 */
	public static function checkMenuName($menuname = ''){
	    if(preg_match(self::$REGEX_MENU_NAME, $menuname)) return true;
	    return false;
	}
	/**
	 * 验证菜单编码
	 */
	public static function checkMenuurl($menuurl = ''){
	    if(preg_match(self::$REGEX_MENU_URL,$menuurl)) return true;
	    return false;
	}
	/**
	 * 验证用户登录名
	 */
	public static function checkLoginName($loginName = ''){
	    $pattern = self::$REGEX_LOGIN_NAME;
	    if(preg_match($pattern,$loginName) && is_string($loginName)) return true;
	    return false;
	}
	/**
	 * 验证密码强度
	 * @param string $pass
	 * @return boolean
	 */
    public static function checkPass($pass = ''){
        $pattern = self::$REGEX_PASS;
        if(!preg_match($pattern, $pass))return false;
        return true;
    }
	/**
	 * 验证用户USERID是否正确
	 *
	 * @param string $userid
	 * @return boolean
	 */
	static public function checkUserId($userid = '') {
	    $pattern = self::$REGEX_USER_ID;
	    if (! preg_match ( $pattern, $userid )) {
	        return false;
	    }
	    return true;
	}	
	/**
	 * 验证用户名是否正确
	 *
	 * @param string $user_name        	
	 * @return boolean
	 */
	static public function checkUserName($user_name = '') {
		$pattern = self::$REGEX_USER_NAME;
		if (! preg_match ( $pattern, $user_name )) {
			return false;
		}
		return true;
	}
	
	/**
	 * 验证用户昵称是否正确
	 *
	 * @param string $user_name
	 * @return boolean
	 */
	static public function checkNickName($nick_name = '') {
	    $pattern = self::$REGEX_NICK_NAME;
	    if (! preg_match ( $pattern, $nick_name ) || !is_string($nick_name)) {
	        return false;
	    }
	    return true;
	}	
	
	/**
	 * 验证手机号是否正确
	 *
	 * @param string $phone_no        	
	 * @return boolean
	 */
	static public function checkPhone($phone_no = '') {
		$pattern = self::$REGEX_PHONE;
		if (! preg_match ( $pattern, $phone_no )) {
			return false;
		}
		return true;
	}
	
	/**
	 * 验证用户身份号是否正确
	 *
	 * @param string $id_card        	
	 * @return boolean
	 */
	static public function checkUserIdCard($id_card = '') {
		$pattern = self::$REGEX_ID_CARD;
		if (! preg_match ( $pattern, $id_card ) || !is_string($id_card)) {
			return false;
		}
		return true;
	}
	
	/**
	 * 验证验证码是否正确
	 *
	 * @param string $vcode        	
	 * @return boolean
	 */
	static public function checkVerifyCode($vcode = '') {
		$pattern = self::$REGEX_VCODE;
		if (! preg_match ( $pattern, $vcode )) {
			return false;
		}
		return true;
	}
	
	/**
	 * 验证EMAIL 是否正确
	 * 
	 * @param string $email        	
	 * @return boolean
	 */
	static public function checkEmail($email = '') {
		$pattern = self::$REGEX_EMAIL;
		if (! preg_match ( $pattern, $email )) {
			return false;
		}
		return true;
	}

    /**
     * 验证日期格式（2016-06-03）是否正确
     *
     * @param string $date 验证的日期字符串
     * @return boolean
     */
    static public function checkDate($date = ''){
        $pattern = self::$REGEX_DATE;
        if(!is_string($date) || !preg_match($pattern, $date)){
            return false;
        }
        return true;
	}//end function
	
	/**
	 * url 检测 function
	 *
	 * @param string $url
	 * @return bool
	 */
	static public function checkPathInfo($url = ""){
		$p = "/^\/[a-zA-Z0-9\_\/]+$/";
		if(is_string($url) && preg_match($p,$url))
		{
			return true;
		}else{
			return false;
		}
	}

	public static function checkEnNumStr($str = ""){
        $p = "/^[\-_a-zA-Z0-9]+$/";
        if(is_string($str) && preg_match($p,$str)) return true;
        return false;
	}

	public static function checkMd5Sign($sign = ""){
	    $p = self::$REGEX_MD5;
	    if(is_string($sign) && preg_match($p,$sign)){
	        return true;
        }
        return false;
    }

    public static function checkTimestamp($str = ""){
        $p = '/^[1-9]\d{9}$/';
        if(is_string($str) && preg_match($p,$str)){
            return true;
        }
        return false;
    }//end function


    public static function checkH5Progress($proess = ""){
	    $p = '/^0(\.[\d]{0,4})*$/';
	    if(is_numeric($proess)){
	        if(preg_match($p,$proess) || "1" == $proess){
	            return true;
            }
            return false;
        }
        return false;
    }//end function



}//end class